iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0

在我們的生活中,有許多重要的事情需要我們時常檢討和改進,這個過程被稱為斷捨離,不僅適用於程式碼,也適用於我們的人生。

在寫許多行程式碼來實現不同的功能,有時候這些程式碼變得非常複雜難以理解,就像一個亂掉的房間一樣,這時候該斷捨離的像是

  • 寫作文一樣的註解
  • 需要超級多參數才可以執行的函式
  • 過度複雜的條件判斷
  • 寫死的 Magic Number 或是設定檔
  • 覺得以後有機會用到但現在沒作用的程式碼
  • 過多的中間產物,更不該把中間產物當結果
  • 東貼西貼複製貼上的程式碼
  • 做到一半且短期不會完成的功能
if (a > 10 && (b === 'foo' || c < 5) && (d !== 'bar' || e > 20)) {
    // ...
}

function processUserData(username, email, age, address, phone, interests) {
    // 非常長的函數內容...
}

if (statusCode === 20100) {
    // ...
}

function processALotOfTempValue () {
  let temp1, temp2, temp3, temp4, temp5, result;
  // ...

  return result;
}

function addNumbers(num1, num2) {
    // 檢查是否為數字
    if (typeof num1 !== 'number' || typeof num2 !== 'number') {
        return "請輸入有效的數字";
    } else {
        // 兩個數字相加
        var result = num1 + num2;
        return result;
    }
}

程式的斷捨離會是一個重構的過程,重構讓程式碼變得更加簡潔、容易閱讀和維護,就像整理混亂的房間,第一步就是將不必要的部分丟棄,重新組織與排放,使一切井然有序。

不僅程式碼需要斷捨離,我們的生活也需要,被填滿了的時間表有時候會造成過度壓力,無法應對生活中的挑戰,這也需要人生的斷捨離的時候。

斷捨離是一個檢討和簡化我們生活的過程,藉由檢討目標和價值觀,看看哪些是真正重要的,哪些是可以放下的。

以剛剛最後一個例子來說,有看出問題在哪邊嗎?

function addNumbers(num1, num2) {
    // 檢查是否為數字
    if (typeof num1 !== 'number' || typeof num2 !== 'number') {
        return "請輸入有效的數字";
    } else {
        // 兩個數字相加
        var result = num1 + num2;
        return result;
    }
}

該減少的是過多的型別檢查,名稱就是 addNumbers 還傳其他參數進去是天兵? JavaScript 會轉型並不會產生程式錯誤回傳錯誤值跟 請輸入有效的數字 有個 87% 像,else 的 block 是一定會被執行的也不需要多包一層。

function addNumbers(num1, num2) {
    // 兩個數字相加
    return num1 + num2;
}

不管在什麼層面,要避免過度和極端,過度的追求會導致不平衡和不和諧,過多的欲望可能導致內心的不穩定和不滿足,當減少欲望,更可以獲得內在的平靜和滿足感。

其中有個水的比喻很好,水能夠適應不同的形狀,不爭鬥也不過於強硬,即使不強硬但卻也可以鑿穿石頭。

YAGNI (You aren't gonna need it!)

YAGNI(You Aren't Gonna Need It)是一個在軟體開發中的設計原則,它強調在開發過程中不要添加不必要的功能或程式碼。

對於人生來說,我們通常只需要一條牙膏跟一隻牙刷,如果依照每層樓去擺放一樣的物品一個家裡面就會擁有好幾組,但我們其實只需要一組不是嗎?

整理東西的時候,我們就要先把同一類的東西先集中,就像我就有好多無線耳機跟喇叭,學校宿舍、工作租屋、辦公室、浴室、運動,但搬回家之後就多了許多沒用到的。

從道德經的觀點來看,YAGNI 可以被解釋為一個實踐節制和簡單的原則,符合道教哲學中強調的中庸之道和適度的概念。

YAGNI 提醒我們不要過於追求完美或添加過多的物品,而應該保持簡單和精簡,並且適時去反省只關注當下需求好好解決即可,不需要為了未來的可能增加多餘的東西。


上一篇
可以簡單就不要複雜的程式碼與人生
下一篇
同類型的東西一再出現
系列文
前端三分鐘 X 每天三分鐘的斷捨離,讓每一天都可以早點下班30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
hlb
iT邦新手 5 級 ‧ 2023-11-03 00:00:56

addNumbers 這個例子值得深入探討,撰寫方式應該要基於使用情境而定。

正如你所指出的,由於 JavaScript 會進行型別轉換,因此即使 num1num2 不是數字,它們直接相加也不會引發錯誤,但可能會得到非預期的結果。例如,輸入 "5" 與 "10" 相加的結果將是 "510",而且是字串不是數字。

您說的沒錯需要基於使用情境而定,我的感覺是不需要過度為了之後可能發生的事情做防呆跟架構。

我要留言

立即登入留言